/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package grafrajz.utils;

import java.util.ArrayList;

/**
 * Gráf csúcsának reprezentációja
 * @author adam_fejes_dell
 */
public class Node {
    private String name;
    private ArrayList<Edge> edges;

    public Node(String name) {
        this.name = name;
        edges = new ArrayList<Edge>();
    }
    
    /**
     * Új él hozzáadása a gráfhoz. az új él kezdőcsúcsa ez a a csúcs lesz
     * @param e A hozzáadandó élet várja paraméterként
     * @return Igazzal tér vissza, ha sikeres a beszúrás
     */
    public boolean addEdge(Edge e){
        if(!edges.contains(e)){
            return edges.add(e);
        }
        else
            return false;
    }
    
    /**
     * Egy ebből a csúcsból kiinduló él eltávolítása
     * @param e Az eltávolítandó élet várja paraméterként
     * @return  Igazzal tér vissza, ha sikeres az eltávolítás
     */
    public boolean removeEdge(Edge e){
        if(edges.contains(e)){
            edges.remove(e);
            //System.out.println("Edge removed: " + e.getSource() + e.getWeight() + e.getDest());
            return true;
        }
        else{
            return false;
        }
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    
    /**
     * @return Visszatérési érték a csúcsból induló élek száma 
     */
    public int getEdgeCount(){
        return edges.size();
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Node other = (Node) obj;
        if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 17 * hash + (this.name != null ? this.name.hashCode() : 0);
        return hash;
    }
    
    public boolean containsEdge(Edge e){
        return edges.contains(e);
    }

    @Override
    public String toString() {
        return name;
    }

    public ArrayList<Edge> getEdges() {
        return edges;
    }
    
    
    
    
}
